﻿using System;
using System.Collections.Generic;

using System.Text;

namespace DotNETX.Authentication
{
    /// <summary>
    /// 凭据管理
    /// 
    /// Token是凭据，他拥有唯一性，并且总集合非常大，在用集合占总集合比例非常小。（eg：GUID，时间戳）
    /// 通常用Token临时关联一个身份，在有效期内得到系统的承认。
    /// </summary>
    public interface ITokenManager
    {
        /// <summary>
        /// 产生一个新凭据
        /// </summary>
        /// <returns></returns>
        string New();
        /// <summary>
        /// 注册凭据（token）与身份标志（uniqueId）关联
        /// </summary>
        /// <param name="token">凭据</param>
        /// <param name="uniqueId">身份标志</param>
        /// <returns>0:success</returns>
        int Register(string token, object uniqueId);
        /// <summary>
        /// 注销凭据，意味着该凭据失效，关联的身份无法通过此凭据得到认证
        /// </summary>
        /// <param name="token">凭据</param>
        /// <returns>0:success</returns>
        int Unregister(string token);
        /// <summary>
        /// 获取身份认证会话
        /// 该会话记录凭据关联的用户身份信息。如成功获取信息，修改UserSession的LastVisitTime，并更新到系统中
        /// 如果凭据拥有有效期，应该在这里面编写逻辑
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        UserSession GetSession(string token);
    }
}
